var express = require('express');
var router = express.Router();

var mongoose = require('mongoose');
var Goods = require('../model/goods');
var User = require('../model/user');

/* 连接数目库. */
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://127.0.0.1:27017/mall', {
    useMongoClient: true
});

// 连接成功回调监听
mongoose.connection.on("connected", function(){
    console.log("mongodb connected success");
});

// 连接失败回调监听
mongoose.connection.on("error", function(){
    console.log("mongodb connected faile");
});

// 连接断开回调监听
mongoose.connection.on("disconnected", function(){
    console.log("mongodb connected disconnected");
});


/**
*   商品列表查询接口
* app.js 下边写的路由是一极路由，在这里写的路由是二级路由
* 例如：app.js 里面写的 /goods 这是一个路由地址了，下边写的 / 就是 /goods/ 默认加载的
*/
router.get("/list", function(req, res, next){

    // 分页
    //res.send(req.query);
    /**/
    let page = parseInt(req.query.page);
    let pageSize = parseInt(req.query.pageSize);

    // 排序
    // req.params  mongoose 的获取前端传递的参数
    let sort = parseInt(req.query.sort);

    let skip = (page-1)*pageSize;

    /**
    * goods.find 查找所有的 给他加一个查找条件 params，params是一个对象
    * .skip(skip) 跳过 skip 条数据
    * .limit(pageSize) 加载 pageSize 条数据
    */ 
    // 获取价格区间
    let params = {};
    let priceLavel = req.query.priceLavel;
    var priceGt = '', // 大于
        priceLt = ''; // 小于
    if(priceLavel != 'all'){
         switch (priceLavel){
            case '1':priceGt = 0;priceLt = 500;break;
            case '2':priceGt = 500;priceLt = 1000;break;
            case '3':priceGt = 1000;priceLt = 2000;break;
            case '4':priceGt = 2000;priceLt = 5000;break;
            case '5':priceGt = 5000;priceLt = 10000;break;
            case '6':priceGt = 10000;priceLt = 100000;break;
        }
        params = {
            salePrice:{
                $gt: priceGt,
                $lte: priceLt
            }
        }
    }else{
        params = {};
    }
   

    let goodsModel = Goods.find(params).skip(skip).limit(pageSize);

    // .sort() 排序，分升序降序，1代表升序，-1是降序。排序要有根据，根据什么排序，例如价格。这里接受前端传过来的排序方式.然后根据这些条件 去查找数据，底下写法就要变化了
    let goodsModelS = goodsModel.sort({'salePrice': sort});

    goodsModelS.exec(function(err, doc){
        if(err){
            res.json({
                status: '1',
                msg: err.message
            });
        }else{
            res.json({
                status: '0',
                msg: '',
                result: {
                    count: doc.length,
                    list: doc
                }
            });
        }
    });
    
    /**
    * 连接请求处理数据 0 代表成功，1代表失败
    * doc 就是返回的数据
     
    Goods.find({}, function(err, doc){
        if(err){
            res.json({
                status: '1',
                msg: err.message
            });
        }else{
            res.json({
                status: '0',
                msg: '',
                result: {
                    count: doc.length,
                    list: doc
                }
            });
        }
    });
    */
    
});

/**
*   加入购物车
* 判断是否登录，然后根据传递过来的商品id，在商品表里面找到那个商品，然后将数量选中状态添加上，然后将新的数据插入到user的表中
*/

router.post("/addCart", (req, res, next) => {
    let userId = '01',
        productId = req.body.productId;

    User.findOne({userId: userId}, function(err, userDoc){

        if(err){
            res.json({
                status: '1',
                msg: err.message
            });
        }else{
            // 判断购物车是否有当前数据
            if(userDoc){
                // 判断商品是否添加过
                let goodsItem = '';
                userDoc.cartlist.forEach((item)=>{
                    if(item.productId == productId){
                        goodsItem = item;
                        item.productNum++;
                    }
                });
                if(goodsItem){
                    // 已经添加过的商品，在上边循环的时候已经将数量进行了变化，所以在这里就只需要保存 数据表就行了
                    userDoc.save((err2, doc2)=>{
                        if(err2){
                            res.json({
                                status: '1',
                                msg: err2.message
                            });
                        }else{
                            res.json({
                                status: '0',
                                msg: '',
                                result: 'success'
                            });
                        }
                    });
                }else{
                    // 没有添加过商品,购物车为空
                    Goods.findOne({productId: productId}, (err1, doc1)=>{
                        if(err1){
                            res.json({
                                status: '1',
                                msg: err1.message
                            });
                        }else{
                            if(doc1){
                                doc1.productNum = 1;
                                doc1.checked = "true";
                                // 获取用户的 购物车的数据表，直接 push 商品数据 就可以了
                                userDoc.cartlist.push(doc1);
                                userDoc.save((err2, doc2)=>{
                                    if(err2){
                                        res.json({
                                            status: '1',
                                            msg: err2.message
                                        });
                                    }else{
                                        res.json({
                                            status: '0',
                                            msg: '',
                                            result: 'success'
                                        });
                                    }
                                });
                            }
                        }
                    });
                }

                
            }
        }

    });

});

module.exports = router;